home *** CD-ROM | disk | FTP | other *** search
- /*
- HighLevelTCP.c
-
- high-level TCP I/O functions
-
- 11/28/95 MEC - Created.
- */
-
- #include <HighLevelTCP.h>
-
- #include <SegLoad.h>
- #include <OSUtils.h>
-
- #if defined(SYMANTEC_C)||defined(THINK_C)
- #define inline
- #endif
-
- #if defined(SYMANTEC_C)||defined(THINK_C)
- #else
- #pragma mark -
- #pragma mark •• High-level TCP Functions ••
- #endif
- OSErr tcpCreate(StreamPtr *stream,ProcPtr tcpNotifyProc,Ptr buffer, long bufsize){
- OSErr err=noErr;
- TCPiopb tcp;
- TCPNotifyUPP notify;
-
- if (buffer == NULL){
- if (bufsize == 0)
- bufsize = 16*1024;
-
- buffer=NewPtr(bufsize);
- }
-
- notify=NewTCPNotifyProc(tcpNotifyProc);
-
- tcp.csParam.create.rcvBuff=buffer;
- tcp.csParam.create.rcvBuffLen=bufsize;
- tcp.csParam.create.notifyProc=notify;
-
- err=TCP_Create(&tcp,false);// create the stream...
-
- *stream = err ? 0 : tcp.tcpStream;
-
- return err;
- }
-
- OSErr tcpConnect(StreamPtr stream,ip_addr host,short port,short timeout){
- TCPiopb tcp;
-
- tcp.tcpStream=stream;
-
- tcp.csParam.open.ulpTimeoutValue=timeout;
- tcp.csParam.open.ulpTimeoutAction=0;
- tcp.csParam.open.remoteHost=host;
- tcp.csParam.open.remotePort=port;
- tcp.csParam.open.validityFlags=0;
- tcp.csParam.open.tosFlags=0;
- tcp.csParam.open.precedence=0;
- tcp.csParam.open.dontFrag=true;
- tcp.csParam.open.timeToLive=0;
- tcp.csParam.open.security=0;
- tcp.csParam.open.optionCnt=0;
-
- return TCP_ActiveOpen(&tcp,false);// Open the connection...
- }
-
- OSErr tcpSend(StreamPtr stream,Ptr data,unsigned short len,Boolean push,Boolean urgent){
- TCPiopb tcp;
- wdsEntry en[2];
-
- en[0].length=len;
- en[0].ptr=data;
-
- en[1].length=0;
- en[1].ptr=0;
-
- tcp.tcpStream=stream;
-
- tcp.csParam.send.ulpTimeoutValue=0;
- tcp.csParam.send.ulpTimeoutAction=0;
- tcp.csParam.send.validityFlags=0;
- tcp.csParam.send.pushFlag=push;
- tcp.csParam.send.urgentFlag=urgent;
- tcp.csParam.send.wdsPtr=(char*)en;
-
- return TCP_Send(&tcp,false); // send data synchronously...
- }
-
- OSErr tcpRead(StreamPtr stream,Ptr data,unsigned short *len){
- OSErr err=noErr;
- TCPiopb tcp;
-
- tcp.tcpStream=stream;
-
- tcp.csParam.receive.commandTimeoutValue=0;
- tcp.csParam.receive.rcvBuff = (char*) data;
- tcp.csParam.receive.rcvBuffLen = *len;
-
- err=TCP_Rcv(&tcp,false);// Do a synchronous read...
-
- *len = tcp.csParam.receive.rcvBuffLen;
-
- return err;
- }
-
- OSErr tcpNoCopyRcv(StreamPtr stream,TCPiopb *tcp,short rdsLen,rdsEntry *rds){
-
- if (tcp == NULL)
- return tcpNilPB;
-
- // put 0 after last RDS entry
- rds[rdsLen].length=0;
-
- tcp->tcpStream=stream;
-
- tcp->csParam.receive.commandTimeoutValue=0;
- tcp->csParam.receive.rdsPtr=(char*)rds;
- tcp->csParam.receive.rdsLength=rdsLen;
-
- TCP_NoCopyRcv(tcp,true);
-
- return tcp->ioResult;
- }
-
- OSErr tcpReturnBuffers(StreamPtr stream,rdsEntry *rds){
- TCPiopb tcp;
-
- tcp.tcpStream=stream;
-
- tcp.csParam.receive.rdsPtr=(char*)rds;
-
- return TCP_RcvBfrReturn(&tcp,false);
- }
-
- OSErr tcpClose(StreamPtr stream){
- TCPiopb tcp;
-
- tcp.tcpStream=stream;
- tcp.csParam.close.ulpTimeoutValue=0;
- tcp.csParam.close.ulpTimeoutAction=0;
- tcp.csParam.close.validityFlags=0;
-
- return TCP_Close(&tcp,false);
- }
-
- OSErr tcpRelease(StreamPtr stream,Ptr *buffer, long *bufsize){
- TCPiopb tcp;
-
- tcp.tcpStream=stream;
-
- if (buffer != NULL)
- *buffer = tcp.csParam.create.rcvBuff;
- else
- DisposePtr(tcp.csParam.create.rcvBuff);
-
- if (bufsize != NULL)
- *bufsize = tcp.csParam.create.rcvBuffLen;
-
-
- return TCP_Release(&tcp,false);
- }
-
- OSErr tcpAbort(StreamPtr stream){
- TCPiopb tcp;
-
- tcp.tcpStream=stream;
-
- return TCP_Abort(&tcp,false);
- }
-
-
-
-
-